package cn.huaguo.domain.task.service;

import cn.huaguo.domain.task.model.entity.PublishTaskEntity;
import cn.huaguo.domain.task.model.entity.TaskEntity;
import cn.huaguo.domain.task.model.valobj.TaskPageQueryVO;
import cn.huaguo.types.model.PageResult;

/**
 * @Description 任务服务接口
 * @Author wangQian
 * @Date 2024/5/13
 */
public interface ITaskService {
    /**
     * 发布平台交易型任务
     *
     * @param taskEntity 任务实体
     */
    PublishTaskEntity publishTradeTask(TaskEntity taskEntity);

    /**
     * 获取任务列表（搜索+条件分页）
     *
     * @param taskPageQueryVO 任务分页查询条件
     * @return
     */
    PageResult<TaskEntity> queryTaskList(TaskPageQueryVO taskPageQueryVO, String createUserId);

    /**
     * 根据taskId获取任务
     *
     * @param taskId 任务id
     * @return
     */
    TaskEntity getTaskById(String taskId);

    /**
     * 更新任务 包含更新任务状态
     *
     * @param taskEntity
     * @return
     */
    Boolean updateTask(TaskEntity taskEntity);

    /**
     * 删除任务
     *
     * @param taskId
     * @return
     */
    void deleteTaskById(String taskId);

    /**
     * 根据taskId抢任务
     *
     * @param taskEntity
     * @return
     */
    Boolean rushTask(TaskEntity taskEntity);

    /**
     * 确认完成任务
     *
     * @param taskId
     * @return
     */
    void confirmFinishTask(String taskId);

    /**
     * 取消任务
     *
     * @param taskEntity
     * @return
     */
    void cancelTask(TaskEntity taskEntity);

    /**
     * 获取用户任务数量
     *
     * @param createUserId
     * @return
     */
    String getUserTaskCount(String createUserId);

    /**
     * 发布无交易类型任务
     *
     * @param taskEntity
     */
    void publishNoTradeTask(TaskEntity taskEntity);
}
